home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / sys / quota.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  8KB  |  226 lines

  1. /* This just represents the non-kernel parts of <linux/quota.h>.
  2.  *
  3.  * here's the corresponding copyright:
  4.  * Copyright (c) 1982, 1986 Regents of the University of California.
  5.  * All rights reserved.
  6.  *
  7.  * This code is derived from software contributed to Berkeley by
  8.  * Robert Elz at The University of Melbourne.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 4. Neither the name of the University nor the names of its contributors
  19.  *    may be used to endorse or promote products derived from this software
  20.  *    without specific prior written permission.
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  */
  34.  
  35. #ifndef _SYS_QUOTA_H
  36. #define _SYS_QUOTA_H 1
  37.  
  38. #include <features.h>
  39. #include <sys/types.h>
  40.  
  41. /*
  42.  * Select between different incompatible quota versions.
  43.  * Default to the version used by Linux kernel version 2.4.22
  44.  * or later.  */
  45. #ifndef _LINUX_QUOTA_VERSION
  46. # define _LINUX_QUOTA_VERSION 2
  47. #endif
  48.  
  49. /*
  50.  * Convert diskblocks to blocks and the other way around.
  51.  * currently only to fool the BSD source. :-)
  52.  */
  53. #define dbtob(num) ((num) << 10)
  54. #define btodb(num) ((num) >> 10)
  55.  
  56. /*
  57.  * Convert count of filesystem blocks to diskquota blocks, meant
  58.  * for filesystems where i_blksize != BLOCK_SIZE
  59.  */
  60. #define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
  61.  
  62. /*
  63.  * Definitions for disk quotas imposed on the average user
  64.  * (big brother finally hits Linux).
  65.  *
  66.  * The following constants define the amount of time given a user
  67.  * before the soft limits are treated as hard limits (usually resulting
  68.  * in an allocation failure). The timer is started when the user crosses
  69.  * their soft limit, it is reset when they go below their soft limit.
  70.  */
  71. #define MAX_IQ_TIME  604800    /* (7*24*60*60) 1 week */
  72. #define MAX_DQ_TIME  604800    /* (7*24*60*60) 1 week */
  73.  
  74. #define MAXQUOTAS 2
  75. #define USRQUOTA  0        /* element used for user quotas */
  76. #define GRPQUOTA  1        /* element used for group quotas */
  77.  
  78. /*
  79.  * Definitions for the default names of the quotas files.
  80.  */
  81. #define INITQFNAMES { \
  82.    "user",      /* USRQUOTA */ \
  83.    "group",   /* GRPQUOTA */ \
  84.    "undefined", \
  85. };
  86.  
  87. #define QUOTAFILENAME "quota"
  88. #define QUOTAGROUP "staff"
  89.  
  90. #define NR_DQHASH 43          /* Just an arbitrary number any suggestions ? */
  91. #define NR_DQUOTS 256         /* Number of quotas active at one time */
  92.  
  93. /*
  94.  * Command definitions for the 'quotactl' system call.
  95.  * The commands are broken into a main command defined below
  96.  * and a subcommand that is used to convey the type of
  97.  * quota that is being manipulated (see above).
  98.  */
  99. #define SUBCMDMASK  0x00ff
  100. #define SUBCMDSHIFT 8
  101. #define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
  102.  
  103. #if _LINUX_QUOTA_VERSION < 2
  104. # define Q_QUOTAON  0x0100    /* enable quotas */
  105. # define Q_QUOTAOFF 0x0200    /* disable quotas */
  106. # define Q_GETQUOTA 0x0300    /* get limits and usage */
  107. # define Q_SETQUOTA 0x0400    /* set limits and usage */
  108. # define Q_SETUSE   0x0500    /* set usage */
  109. # define Q_SYNC     0x0600    /* sync disk copy of a filesystems quotas */
  110. # define Q_SETQLIM  0x0700    /* set limits */
  111. # define Q_GETSTATS 0x0800    /* get collected stats */
  112. # define Q_RSQUASH  0x1000    /* set root_squash option */
  113. #else
  114. # define Q_SYNC     0x800001    /* sync disk copy of a filesystems quotas */
  115. # define Q_QUOTAON  0x800002    /* turn quotas on */
  116. # define Q_QUOTAOFF 0x800003    /* turn quotas off */
  117. # define Q_GETFMT   0x800004    /* get quota format used on given filesystem */
  118. # define Q_GETINFO  0x800005    /* get information about quota files */
  119. # define Q_SETINFO  0x800006    /* set information about quota files */
  120. # define Q_GETQUOTA 0x800007    /* get user quota structure */
  121. # define Q_SETQUOTA 0x800008    /* set user quota structure */
  122. #endif
  123.  
  124. /*
  125.  * The following structure defines the format of the disk quota file
  126.  * (as it appears on disk) - the file is an array of these structures
  127.  * indexed by user or group number.
  128.  */
  129. #if _LINUX_QUOTA_VERSION < 2
  130. struct dqblk
  131.   {
  132.     u_int32_t dqb_bhardlimit;    /* absolute limit on disk blks alloc */
  133.     u_int32_t dqb_bsoftlimit;    /* preferred limit on disk blks */
  134.     u_int32_t dqb_curblocks;    /* current block count */
  135.     u_int32_t dqb_ihardlimit;    /* maximum # allocated inodes */
  136.     u_int32_t dqb_isoftlimit;    /* preferred inode limit */
  137.     u_int32_t dqb_curinodes;    /* current # allocated inodes */
  138.     time_t dqb_btime;        /* time limit for excessive disk use */
  139.     time_t dqb_itime;        /* time limit for excessive files */
  140.   };
  141. #else
  142.  
  143. /* Flags that indicate which fields in dqblk structure are valid.  */
  144. #define QIF_BLIMITS    1
  145. #define QIF_SPACE    2
  146. #define QIF_ILIMITS    4
  147. #define QIF_INODES    8
  148. #define QIF_BTIME    16
  149. #define QIF_ITIME    32
  150. #define QIF_LIMITS    (QIF_BLIMITS | QIF_ILIMITS)
  151. #define QIF_USAGE    (QIF_SPACE | QIF_INODES)
  152. #define QIF_TIMES    (QIF_BTIME | QIF_ITIME)
  153. #define QIF_ALL        (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
  154.  
  155. struct dqblk
  156.   {
  157.     u_int64_t dqb_bhardlimit;    /* absolute limit on disk quota blocks alloc */
  158.     u_int64_t dqb_bsoftlimit;    /* preferred limit on disk quota blocks */
  159.     u_int64_t dqb_curspace;    /* current quota block count */
  160.     u_int64_t dqb_ihardlimit;    /* maximum # allocated inodes */
  161.     u_int64_t dqb_isoftlimit;    /* preferred inode limit */
  162.     u_int64_t dqb_curinodes;    /* current # allocated inodes */
  163.     u_int64_t dqb_btime;    /* time limit for excessive disk use */
  164.     u_int64_t dqb_itime;    /* time limit for excessive files */
  165.     u_int32_t dqb_valid;    /* bitmask of QIF_* constants */
  166.   };
  167. #endif
  168.  
  169. /*
  170.  * Shorthand notation.
  171.  */
  172. #define    dq_bhardlimit    dq_dqb.dqb_bhardlimit
  173. #define    dq_bsoftlimit    dq_dqb.dqb_bsoftlimit
  174. #if _LINUX_QUOTA_VERSION < 2
  175. # define dq_curblocks    dq_dqb.dqb_curblocks
  176. #else
  177. # define dq_curspace    dq_dqb.dqb_curspace
  178. # define dq_valid    dq_dqb.dqb_valid
  179. #endif
  180. #define    dq_ihardlimit    dq_dqb.dqb_ihardlimit
  181. #define    dq_isoftlimit    dq_dqb.dqb_isoftlimit
  182. #define    dq_curinodes    dq_dqb.dqb_curinodes
  183. #define    dq_btime    dq_dqb.dqb_btime
  184. #define    dq_itime    dq_dqb.dqb_itime
  185.  
  186. #define dqoff(UID)      ((loff_t)((UID) * sizeof (struct dqblk)))
  187.  
  188. #if _LINUX_QUOTA_VERSION < 2
  189. struct dqstats
  190.   {
  191.     u_int32_t lookups;
  192.     u_int32_t drops;
  193.     u_int32_t reads;
  194.     u_int32_t writes;
  195.     u_int32_t cache_hits;
  196.     u_int32_t pages_allocated;
  197.     u_int32_t allocated_dquots;
  198.     u_int32_t free_dquots;
  199.     u_int32_t syncs;
  200.   };
  201. #else
  202.  
  203. /* Flags that indicate which fields in dqinfo structure are valid.  */
  204. # define IIF_BGRACE    1
  205. # define IIF_IGRACE    2
  206. # define IIF_FLAGS    4
  207. # define IIF_ALL    (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
  208.  
  209. struct dqinfo
  210.   {
  211.     u_int64_t dqi_bgrace;
  212.     u_int64_t dqi_igrace;
  213.     u_int32_t dqi_flags;
  214.     u_int32_t dqi_valid;
  215.   };
  216. #endif
  217.  
  218. __BEGIN_DECLS
  219.  
  220. extern int quotactl (int __cmd, const char *__special, int __id,
  221.              caddr_t __addr) __THROW;
  222.  
  223. __END_DECLS
  224.  
  225. #endif /* sys/quota.h */
  226.